﻿#define _CRT_SECURE_NO_WARNINGS
//#include<stdio.h>
////void print(int arr[], int n)
//void print(int* arr, int n)
//{
//	int i = 0;
//	for (i = 0; i < n; i++)
//	{
//		printf("%d ", *(arr + i));
//	}
//	printf("\n");
//	for (i = 0; i < n; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	//arr[i]与*（arr+i）等价
//	//arr[i]<--->*（arr+i<--->*(i+arr)<--->i[arr]  等价
//}
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	print(arr, sz);
//	return 0;
//}



//实现一个对整形数组的冒泡排序//升序
//#include<stdio.h>
//void input(int* p, int sz)
//{
//	for (int i = 0; i < sz; i++)
//	{
//		scanf("%d", p + i);
//	}
//}
//void print(int* p, int sz)
//{
//	for (int i = 0; i < sz; i++)
//	{
//		printf("%d ", *(p + i));
//	}
//}
//void swap(int* arr, int sz)
//{
//	for (int j = 0; j < sz - 1; j++)//趟数
//	{
//		for (int i = 0; i < sz - 1 - j; i++)
//		{
//			if (arr[i]>arr[i+1])
//			{
//				int temp = arr[i];
//				arr[i] = arr[i + 1];
//				arr[i + 1] = temp;
//			}
//		}
//	}
//}
//int main()
//{
//	int arr[10] = { 0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//    input(arr, sz);
//	swap(arr, sz);
//	print(arr, sz);
//	return 0;
//}


////方法优化
//#include<stdio.h>
//void input(int* p, int sz)
//{
//	for (int i = 0; i < sz; i++)
//	{
//		scanf("%d", p + i);
//	}
//}
//void print(int* p, int sz)
//{
//	for (int i = 0; i < sz; i++)
//	{
//		printf("%d ", *(p + i));
//	}
//}
//void swap(int* arr, int sz)
//{
//	for (int j = 0; j < sz - 1; j++)//趟数
//	{
//		int flag = 1;
//		for (int i = 0; i < sz - 1 - j; i++)
//		{
//			if (arr[i] > arr[i + 1])
//			{
//				int temp = arr[i];
//				arr[i] = arr[i + 1];
//				arr[i + 1] = temp;
//				flag = 0;
//			}
//		}
//		if (flag == 1)
//		{
//			break;
//		}
//	}
//}
//int main()
//{
//	int arr[10] = { 0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	input(arr, sz);
//	swap(arr, sz);
//	print(arr, sz);
//	return 0;
//}

//在屏幕上打印杨辉三角
//1
//
//1 1
//
//1 2 1
//
//1 3 3 1
//
//……
//#include<stdio.h>
//int main()
//{
//	int i = 0, j = 0;
//	int arr[10][10] = { 0 };
//	for (i = 0; i < 2; i++)
//	{
//		for (j = 0; j <= i; j++)
//			arr[i][j] = 1;
//	}
//	for (i = 2; i < 10; i++)
//	{
//		for (j = 0; j <= i; j++)
//		{
//			if (j == 0 || i == j)
//				arr[i][j] = 1;
//			else
//				arr[i][j] = arr[i - 1][j] + arr[i - 1][j + 1];
//		}
//	}
//	for (i = 0; i < 10; i++)
//	{
//		for (j = 0; j <= i; j++)
//			printf("%d ", arr[i][j]);
//		printf("\n");
//	}
//	return 0;
//}


//数组名是首元素地址
//2种例外情况
//1.sizeof（数组名）  2.&数组名
//这个时候数组名代表整个数组的地址
//#include<stdio.h>
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	printf("arr      =%p\n", arr);
//	printf("arr+1    =%p\n", arr+1);//跳过4个字节
//	printf("&arr[0]  =%p\n", &arr[0]);
//	printf("&arr[0]+1=%p\n", &arr[0]+1);//跳过4个字节
//	printf("&arr     =%p\n", &arr);
//	printf("&arr+1   =%p\n", &arr+1);//+1跳过整个数组，跳过40个字节
//	return 0;
//}

//二级指针
//用来存放一级指针的地址
//#include<stdio.h>
//int main()
//{
//	int a = 0;
//	int* pa = &a;
//	int** ppa = &pa;//指针变量也是变量，是变量就有地址
//	printf("%p\n", pa);
//	printf("%p\n", ppa);
//	return 0;
//}


//#include<stdio.h>
//void lon(int arr[])
//{
//	int sz2= sizeof(arr) / sizeof(arr[0]);
//	printf("%d\n", sz2);//数组传参传递的是数组⾸元素的地址
//}
//int main()
//{
//	int arr[10] = { 0 };
//	int sz1 = sizeof(arr) / sizeof(arr[0]);
//	printf("%d\n", sz1);
//	lon(arr);
//	return 0;
//}


//#include<stdio.h>
//void test1(int arr[])//参数写成数组形式，本质上还是指针,数组传参传递的是数组⾸元素的地址
//{
//	printf("%d\n", sizeof(arr));
//}
//void test2(int* arr)//参数写成指针形式
//{
//	printf("%d\n", sizeof(arr));//计算⼀个指针变量的⼤⼩
//}
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	test1(arr);
//	test2(arr);
//	return 0;
//}


//
//#include <stdio.h>
//int main()
//{
//	char str1[] = "hello bit.";
//	char str2[] = "hello bit.";
//	const char* str3 = "hello bit.";
//	const char* str4 = "hello bit.";
//	//指针变量str3 ，str4 事实上是存放的常量字符串首字符的地址
//	if (str1 == str2)
//		printf("str1 and str2 are same\n");
//	else
//		printf("str1 and str2 are not same\n");
//
//	if (str3 == str4)
//		printf("str3 and str4 are same\n");
//	else
//		printf("str3 and str4 are not same\n");
//
//	return 0;
//}

#include <stdio.h>
int main()
{
	char str1[] = "hello bit.";
	char str2[] = "hello bit.";
	char* str3 = "hello bit.";
	char* str4 = "hello bit.";
	//指针变量str3 ，str4 事实上是存放的常量字符串首字符的地址
	//当⼏个指针指向同⼀个字符串的时候，他们实际会指向同⼀块内存
	if (str1 == str2)
		printf("str1 and str2 are same\n");
	else
		printf("str1 and str2 are not same\n");

	if (str3 == str4)
		printf("str3 and str4 are same\n");
	else
		printf("str3 and str4 are not same\n");

	return 0;
}